home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club 2000 October / Software of the Month - Ultimate Collection Shareware 277.iso / pc / PROGRAMS / UTILITY / WINLINUX / DATA1.CAB / programs_-_include / ASM-ALPH.{_4 / SMPLOCK.H < prev    next >
C/C++ Source or Header  |  1999-09-17  |  922b  |  51 lines

  1. /*
  2.  * <asm/smplock.h>
  3.  *
  4.  * Default SMP lock implementation
  5.  */
  6.  
  7. #include <linux/sched.h>
  8. #include <linux/interrupt.h>
  9. #include <asm/spinlock.h>
  10.  
  11. extern spinlock_t kernel_flag;
  12.  
  13. /*
  14.  * Release global kernel lock and global interrupt lock
  15.  */
  16. static __inline__ void release_kernel_lock(struct task_struct *task, int cpu)
  17. {
  18.     if (task->lock_depth >= 0)
  19.         spin_unlock(&kernel_flag);
  20.     release_irqlock(cpu);
  21.     __sti();
  22. }
  23.  
  24. /*
  25.  * Re-acquire the kernel lock
  26.  */
  27. static __inline__ void reacquire_kernel_lock(struct task_struct *task)
  28. {
  29.     if (task->lock_depth >= 0)
  30.         spin_lock(&kernel_flag);
  31. }
  32.  
  33. /*
  34.  * Getting the big kernel lock.
  35.  *
  36.  * This cannot happen asynchronously,
  37.  * so we only need to worry about other
  38.  * CPU's.
  39.  */
  40. static __inline__ void lock_kernel(void)
  41. {
  42.     if (!++current->lock_depth)
  43.         spin_lock(&kernel_flag);
  44. }
  45.  
  46. static __inline__ void unlock_kernel(void)
  47. {
  48.     if (--current->lock_depth < 0)
  49.         spin_unlock(&kernel_flag);
  50. }
  51.